EE263 Homework 3
课程主页:https://see.stanford.edu/Course/EE263
这次回顾EE263作业3。
2.17
(a)因为
所以
因此
(b)因为
所以
因此
(c)由$A^T=A$和上一题可得
3.13
对于行满秩矩阵$A\in \mathbb R^{m\times n}$,如果$A^T $的$QR$分解为
其中$R$可逆,取
那么
(a)此时只要计算
的右逆$B_1$,然后对$B_1$的第二行插入$0$即可,注意$A_1$依然行满秩,所以仍然存在右逆,编写程序后得到:
import numpy as np
A = np.array([
[-1, 0, 0, -1, 1],
[0, 1, 1, 0, 0],
[1, 0, 0, 1, 0]
])
n, m = A.shape
#### (a)
A1 = np.c_[A[:, 0], A[:, 2:]]
#QR分解
Q, R = np.linalg.qr(A1.T)
#计算右逆
B1 = Q.dot(np.linalg.inv(R.T))
#计算最终结果
B = np.r_[B1[0, :], np.zeros(n)].reshape(2, n)
B = np.r_[B, B1[1:, :]]
print(B)
#验证结果
print(A.dot(B))
[[9.72785220e-18 0.00000000e+00 5.00000000e-01]
[0.00000000e+00 0.00000000e+00 0.00000000e+00]
[0.00000000e+00 1.00000000e+00 0.00000000e+00]
[1.91026513e-16 0.00000000e+00 5.00000000e-01]
[1.00000000e+00 0.00000000e+00 1.00000000e+00]]
[[ 1.00000000e+00 0.00000000e+00 -2.22044605e-16]
[ 0.00000000e+00 1.00000000e+00 0.00000000e+00]
[ 2.00754365e-16 0.00000000e+00 1.00000000e+00]]
不考虑浮点数产生的误差,我们有
(b)不可能,原因如下:
由条件可得
但是因为
所以
这就产生了矛盾。
(c)不可能,如果$B$的第三列为$0$,那么$AB$的第三列为$0$,与条件矛盾。
(d)记
注意到
所以
注意到此时有
所以只要考虑
求出满足条件的$B$,使得
即可。又因为$A_1$的$2,3$列为$0$,所以只要考虑
求$B_2$,使得
求解该方程组得到
最终的结果为
最后验证结果:
#### (d)
B = np.array([
[0, 0, 0.5],
[0, 0.5, 0],
[0, 0.5, 0],
[0, 0, 0.5],
[1, 0, 1]
])
print(A.dot(B))
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
(e)此时
那么
所以
这就产生了矛盾。
(f)此时
那么
所以可以取
验证结果:
#### (f)
B = np.array([
[0, 0, 0],
[0, 0, 0],
[0, 1, 0],
[0, 0, 1],
[1, 0, 1]
])
print(A.dot(B))
[[1 0 0]
[0 1 0]
[0 0 1]]
4.1
将$U$扩张为正交矩阵:
那么
注意到
因此
所以
当且仅当
时等号成立,由$x$的任意性可得必然有$k=n$。
4.2
(a)
(b)
(c)由正交矩阵的特点可得
所以不妨设
又因为
所以
所以
如果
那么
此时为旋转矩阵。
如果
那么
此时为反射矩阵。
4.3
(a)
(b)
(c)
(d)$\forall z_0 =Pz \in \mathcal{R}(P)$,那么
当且仅当$z=x$时等号成立。
5.1
因为
所以
由上一题可知$P$为对称矩阵,因此
6.9
A = zeros(N, n_pixels^2);
for i = 1 : N
data = line_pixel_length(lines_d(i),lines_theta(i),n_pixels);
data = data(:);
A(i, :) = data;
end
% v = inv(A' * A) * A' * y;
v = A \ y;
X = reshape(v, n_pixels, n_pixels);
figure(1) % display the original image
colormap gray
imagesc(X)
axis image
补充题
1
N = 40;
x =[0.0197; 0.0305; 0.0370; 0.1158; 0.2778; 0.3525; 0.3974; 0.3976; 0.4053; 0.4055; 0.4623; 0.5444; 0.7057; 0.8114; 0.8205; 0.8373; 0.8894; 0.8902; 0.9129; 0.9320; 0.9720; 1.0503; 1.2076; 1.2137; 1.2309; 1.3443; 1.4764; 1.4936; 1.5242; 1.5839; 1.6263; 1.6428; 1.6924; 1.7826; 1.7873; 1.8338; 1.8436; 1.8636; 1.8709; 1.9003];
y =[-0.0339; -0.1022; -0.0165; -0.0532; -0.2022; -0.1149; -0.1310; -0.1924; -0.1768; -0.1845; -0.2210; -0.1994; -0.3058; -0.1916; -0.3097; -0.3011; -0.2657; -0.3162; -0.3295; -0.3710; -0.3247; -0.4274; -0.3756; -0.3323; -0.4545; -0.4242; -0.4710; -0.6230; -0.6332; -0.5694; -0.6458; -0.6025; -0.6313; -0.7051; -0.6799; -0.7489; -0.7310; -0.8675; -0.8146; -0.8469];
% (a)
x1 = [x, ones(N, 1)];
% A1 = inv(x1' * x1) * x1' * y;
A1 = x1 \ y
% (b)
x2 = [x.^3, x.^2, x, ones(N, 1)];
% A3 = inv(x2' * x2) * x2' * y;
A2 = x2 \ y
输出为
A1 =
-0.3881
0.0014
A2 =
-0.1476
0.3045
-0.4632
-0.0320
2
N = 1000;
R1 = zeros(N, 1);
R2 = zeros(N, 1);
for i = 1:N
% (a)生成数据
A = randn(50, 20);
v = 0.1 * randn(50, 1);
x = randn(20, 1);
y = A * x + v;
% (b)最小二乘
xls = A \ y;
r1 = norm(xls - x) / norm(x);
% (c)
y_trunc = y(1:20, :);
A_trunc = A(1:20, :);
xjem = A_trunc \ y_trunc;
r2 = norm(xjem - x) / norm(x);
R1(i) = r1;
R2(i) = r2;
end
mean(R1)
mean(R2)
ans =
0.0189
ans =
0.8128
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Doraemonzzz!
评论
ValineLivere